home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / tutor.arc / DCODE68K.SA < prev    next >
Text File  |  1990-01-05  |  49KB  |  1,479 lines

  1.          TTL       DCODE68K  DISASSEMBLER
  2. DCODE68K IDNT      1,4       68K ONE LINE DISASSEMBLER               07/28/82
  3.          XREF      PNT4HX,PNT6HX,PNT8HX
  4.          XREF      FRELADDR
  5.          XREF      HEX2DEC
  6.  SPC 1
  7.          XDEF      DCODE68K
  8. BUFSIZE  SET       80                  SIZE OF OUTPUT BUFFER
  9. EOT      SET       4
  10.  SPC 1
  11. *        CALLING SEQUENCE:
  12. *   D0,D1,D2 = CODE TO BE DISASSEMBLED
  13. *   A4 = VALUE OF PROGRAM COUNTER FOR THE CODE
  14. *   A5 = POINTER TO STORE DATA (BUFSIZE = 80 ASSUMED)
  15. *        JSR       DCODE68K
  16.  SPC 1
  17. *        RETURN:
  18. *   A4 = VALUE OF PROGRAM COUNTER FOR NEXT INSTRUCTION
  19. *   A5 = POINTER TO LINE AS DISASSEMBLED
  20. *   A6 = POINTER TO END OF LINE
  21. *
  22. * 01234567890123456789012345678901234567890123456789
  23. * AAAAAA FDATA.DDDDDDDDDDDDDD FOC.... FOP.....
  24.  SPC 1
  25. FDATA    EQU       10  DATA FIELD
  26. FOC      EQU       31  OP-CODE FIELD
  27. FOP      EQU       39  OPERAND FIELD
  28.  SPC 1
  29. * CAUSES ORGIN MODULO 4
  30. LONG     MACRO
  31.          DS        0
  32.          DS.B      (*-X)&2
  33.          ENDM
  34.  SPC 3
  35. LOCVARSZ EQU 16
  36.          OFFSET -LOCVARSZ
  37. DATA     DS.L 3
  38. HISPC    DS.L 1
  39.  
  40.          SECTION   11
  41.     PAGE
  42. X        DS        0         BASE ADDRESS THIS MODULE
  43.          LONG
  44. *  MOVEM REGISTERS TO EA
  45. *
  46. *  01001D001S......
  47. *  ..........XXXXXX  EFFECTIVE ADDRESS
  48. *  .........0......  WORD
  49. *  .........1......  LONG
  50. *  .....0..........  REGISTER TO MEMORY
  51. *  .....1..........  MEMORY TO REGISTER
  52. *
  53. IMOVEMFR DS        0
  54.          BSR       MOVEMS              SIZE
  55.  
  56.          MOVE.L    #$0038,D6           .                             1,4
  57.          AND.W     (A4),D6             .                             1,4
  58.          CMP.W     #$0020,D6
  59.          BEQ.S     IM7788              PREDECREMENT MODE
  60.  
  61.          MOVE.L    #1,D6               D6 = INCREMENTER (BIT POSITION)
  62.          MOVE.L    #0,D1               D1 = BIT POSITION
  63.          BRA.S     IM7799
  64.  
  65. IM7788   MOVE.L    #-1,D6              D6 = DECREMENTER (BIT POSITION)
  66.          MOVE.L    #15,D1              D1 = BIT POSITION
  67. IM7799   BSR       MOVEMR              BUILD MASK WORD
  68.  SPC 1
  69.          MOVE.B    #',',(A6)+            STORE COMMA
  70.  SPC 1
  71.          ADD.L     #2,D3
  72.          MOVE.W    (A4),D4
  73.          MOVE.W    #$1F4,D7            CONTROL + PREDECREMENT
  74.          BSR       EA
  75.          BRA.S     CS16                COMMON
  76.  SPC 1
  77.          LONG
  78. * MOVEM  EA  TO REGISTERS
  79. *
  80. IMOVEMTR BSR       MOVEMS              SIZE
  81.          ADD.L     #2,D3
  82.          MOVE.W    #$7EC,D7            CONTROL + POSTINCREMENT
  83.          BSR       EA
  84.  SPC 1
  85.          MOVE.B    #',',(A6)+            STORE COMMA
  86.  SPC 1
  87.          MOVE.L    #1,D6               D6 = BIT POSITION INCREMENTER
  88.          MOVE.L    #0,D1               D1 = BIT POSITION
  89.          BSR       MOVEMR
  90.  SPC 1
  91. CS16     BRA.S     CS15                COMMON
  92.  SPC 1
  93.  PAGE
  94.          LONG
  95. ISTOP    DS        0
  96.          MOVE.W    2(A4),D0
  97.          MOVE.B    #'#',(A6)+          IMMEDIATE
  98.          MOVE.B    #'$',(A6)+          HEX
  99.          BSR       PNT4HX              VALUE
  100.          BRA       COMMON4
  101.  PAGE
  102.          LONG
  103. IMMED    DS        0                   ADD  AND  CMP #  EOR  OR  SUB
  104.          BSR       FORMSIZE
  105.          ADD.L     #2,D3               SIZE = 4
  106.          MOVE.B    #'#',(A6)+          IMMEDIATE
  107.  SPC 1
  108.          CLR.L     D0
  109.          MOVE.W    2(A4),D0            D0 = EXTENSION WORD
  110.          MOVE.W    (A4),D1
  111.          LSR.W     #6,D1
  112.          AND.W     #3,D1
  113.          BEQ.S     IMMED65   .BYTE
  114.  SPC 1
  115.          CMP.B     #1,D1
  116.          BEQ.S     IMMED75   .WORD
  117.  SPC 1
  118.          ADD.L     #2,D3               .LONG    SIZE = 6
  119.          MOVE.L    2(A4),D0            D0 = LONG EXTENSION WORD
  120.  SPC 1
  121. IMMED45  BSR       HEX2DEC             DECIMAL
  122.  SPC 1
  123.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  124.  
  125.          MOVE      (A4),D0
  126.          AND.W     #$003F,D0
  127.          CMP.W     #$003C,D0           DESTINATION ADDRESS MODE 111100  "SR"
  128.          BNE.S     IMMED55               NOT FOUND
  129.  
  130.          MOVE.W    (A4),D0             "SR"  ILLEGAL FOR
  131.          AND.W     #$4000,D0               ADDI   SUBI  CMPI
  132.          BNE       FERROR                  0600   0400  0C00
  133.  
  134.          MOVE.W    (A4),D1
  135.          AND.W     #$00C0,D1
  136.          CMP.W     #$0080,D1
  137.          BEQ       FERROR              .LONG NOT ALLOWED
  138.  
  139.          MOVE.B    #'S',(A6)+             #,SR FOR ANDI, EORI, ORI
  140.          MOVE.B    #'R',(A6)+
  141. CS15     BRA.S     CS14                    COMMON
  142.  SPC 1
  143. IMMED55  BSR       EA
  144.          BRA.S     CS14                     COMMON
  145.  
  146. IMMED65  MOVE.L    D0,D1               D1 = XXXXXXXX........
  147.          LSR.W     #8,D1               D1 = 00000000XXXXXXXX
  148.          BEQ.S     IMMED75
  149.          MOVE.L    D0,D1
  150.          ASR.W     #7,D1
  151.          ADD.W     #1,D1               CHECK FOR NEGATIVE
  152.          BNE       FERROR
  153.  
  154. IMMED75  EXT.L     D0
  155.          BRA       IMMED45
  156.  PAGE
  157. *   BIT  5432109876543210
  158. *        ....RRRMMM......    DESTINATION REGISTER MODE
  159. *        ..........MMMRRR    SOURCE MODE REGISTER
  160. *        0001............    .BYTE
  161. *        0011............    .WORD
  162. *        0010............    .LONG
  163. *
  164. * IF BYTE SIZE; DESTINATION ADDRESS DIRECT NOT ALLOWED
  165.          LONG
  166. IMOVE    DS        0
  167.          BRA       IMOVEA1
  168.  SPC 2
  169.          LONG
  170. ILINK    DS        0
  171.          BSR.S     FORMREGA
  172.  SPC 1
  173.          MOVE.B    D5,(A6)+          COMMA SERARATOR
  174.  SPC 1
  175.          MOVE.B    #'#',(A6)+
  176.          MOVE.W    2(A4),D0
  177.          EXT.L     D0
  178.          BSR       HEX2DEC             DECIMAL DISPLACEMENT
  179.          BRA       COMMON4
  180.  PAGE
  181.          LONG
  182. FORM1    DS        0                   CLR  NEG  NEGX  NOT TST
  183.          BSR.L     FORMSIZE
  184.  SPC 1
  185.  
  186. *                            NBCD TAS
  187. FORM1A   BSR       EA                  DATA ALTERABLE ONLY
  188. CS14     BRA.S     CS13             COMMON
  189.  SPC 1
  190.          LONG
  191. FORM3    DS        0                   EXT  SWAP
  192.          BSR.S     FORMREGD
  193.          BRA.S     CS13               COMMON
  194.  SPC 1
  195.          LONG
  196. FORM4    DS        0                   TRAP
  197.          MOVE.B    #'#',(A6)+
  198.          MOVE.W    (A4),D0
  199.          AND.L     #$0F,D0
  200.          BSR       HEX2DEC             DECIMAL
  201.          BRA.S     CS13                COMMON
  202.  SPC 1
  203.          LONG
  204. FORM5    DS        0                   UNLNK
  205.          BSR.S     FORMREGA
  206.          BRA.S     CS13                 COMMON
  207.   PAGE
  208. *     5432109876543210
  209. *     ....RRR.........       ADDRESS REGISTER
  210. *     ..........XXXXXX       EFFECTIVE ADDRESS
  211. *
  212.          LONG
  213. FORM6A   DS        0                   LEA
  214.          MOVE.W    #$7E4,D7             CONTROL ADDRESSING
  215.          BSR.S     EA10
  216.  SPC 1
  217.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  218.  SPC 1
  219.          MOVE.W    (A4),D4
  220.          ROL.W     #7,D4
  221.          BSR.S     FORMREGA
  222.          BRA.S     CS13                 COMMON
  223.  SPC 1
  224. *   BIT  5432109876543210
  225. *        ....DDD.........    DATA REGISTER
  226. *        ..........XXXXXX    EFFECTIVE ADDRESS
  227. *
  228.          LONG
  229. FORM6D   DS        0                   CHK  DIVS  DIVU  MULS  MULU
  230.          MOVE.W    #$FFD,D7            DATA ADDRESSING
  231.          BSR.S     EA10
  232.  SPC 1
  233.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  234.  SPC 1
  235.          MOVE.W    (A4),D4
  236.          ROL.W     #7,D4
  237.          BSR.S     FORMREGD
  238.          BRA.S     CS13               COMMON
  239.  SPC 1
  240. FORMREGA MOVE.B    #'A',(A6)+          FORMAT A@
  241. FORMREG5 AND.B     #$07,D4
  242.          OR.B      #'0',D4
  243.          MOVE.B    D4,(A6)+
  244.          RTS
  245.  SPC 1
  246. FORMREGD MOVE.B    #'D',(A6)+          FORMAT D@
  247.          BRA       FORMREG5
  248.  SPC 1
  249. *  BIT  5432109876543210
  250. *       ....DDD......DDD     DATA REGISTERS
  251. *
  252.          LONG
  253. FORM7    DS        0                   EXG
  254.          ROL.W     #7,D4
  255.          BSR       FORMREGD
  256.  SPC 1
  257.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  258.  SPC 1
  259.          MOVE.W    (A4),D4
  260.          BSR       FORMREGD
  261.          BRA.S     CS13                COMMON
  262.  SPC 1
  263. *  BIT  5432109876543210
  264. *       ....AAA......AAA     ADDRESS REGISTERS
  265. *
  266.          LONG
  267. FORM8    DS        0                   EXG
  268.          ROL.W     #7,D4
  269.          BSR       FORMREGA
  270.  SPC 1
  271. FORM815  MOVE.B    #',',(A6)+          COMMA SEPARATOR
  272.  SPC 1
  273.          MOVE.W    (A4),D4
  274.          BSR       FORMREGA
  275. CS13     BRA       CS12                COMMON
  276.  SPC 1
  277. *  BIT  5432109876543210
  278. *       ....DDD.........     DATA REGISTER
  279. *       .............AAA     ADDRESS REGISTER
  280. *
  281.          LONG
  282. FORM9    DS        0                   EXG
  283.          ROL.W     #7,D4
  284.          BSR       FORMREGD  DATA REGISTER
  285.          BRA       FORM815
  286.  SPC 3
  287. EA10     BRA       EA
  288.  PAGE
  289. *   5432109876543210
  290. *   ..........AAAAAA         EFFECTIVE ADDRESS
  291. *   .......MMM......         OP-MODE
  292. *   ....RRR.........         D-REGISTER
  293. *   .......011......         WORD  EA,A@
  294. *   .......111......         LONG  EA,A@
  295. *   .......000......         EA,D@ BYTE (ADDRESS REGISTER DIRECT NOT ALLOWED)
  296. *   .......0........         EA,D@
  297. *   .......1........         D@,EA
  298. *   ........00......         BYTE
  299. *   ........01......         WORD
  300. *   ........10......         LONG
  301. *
  302.          LONG
  303. *                            ADD <EA>,A@   CMP <EA>,A@   SUB <EA>,A@
  304. FORM10EX DS        0                   ADD  CMP  SUB
  305.          MOVE.W    #$FFF,D7            ALL MODES ALLOWED
  306.          MOVE.L    D4,D0
  307.          AND.W     #$01C0,D0
  308.          BEQ.S     FORM103             .......000......
  309.          CMP.W     #$01C0,D0
  310.          BEQ.S     FORM10E3            .......111......
  311.          CMP.W     #$00C0,D0
  312.          BNE.S     FORM10E6
  313.  
  314.          MOVE.B    #'.',(A5)+          .......011......       STORE PERIOD
  315.          MOVE.B    #'W',(A5)+
  316.          BRA.S     FORM10E4
  317.  SPC 1
  318. FORM10E3 MOVE.B    #'.',(A5)+
  319.          MOVE.B    #'L',(A5)+
  320.  
  321. FORM10E4 BSR       EA10
  322.  SPC 1
  323.          MOVE.B    D5,(A6)+            STORE COMMA SEPARATOR
  324.  SPC 1
  325.          MOVE.W    (A4),D4
  326.          ROL.W     #7,D4
  327.          BSR       FORMREGA            <EA>,A@
  328.          BRA.S     CS12                COMMON
  329.  
  330. FORM10E6 BTST.B    #0,(A4)
  331.          BNE.S     FORM105             .......1........    D@,<EA>
  332.          BRA.S     FORM104             .......0........    <EA>,D@
  333.  PAGE
  334. *   5432109876543210
  335. *   ..........AAAAAA         EFFECTIVE ADDRESS
  336. *   .......MMM......         OP-MODE
  337. *   ....RRR.........         D-REGISTER
  338. *   .......0........         EA,D@
  339. *   .......1........         D@,EA
  340. *   ........00......         BYTE
  341. *   ........01......         WORD
  342. *   ........10......         LONG
  343.          LONG
  344. FORM10   DS        0                   AND  EOR  OR
  345.          BTST.B    #0,(A4)
  346.          BNE.S     FORM105
  347.  SPC 1
  348. FORM103  MOVE.W    #$FFD,D7            DATA ADDRESSING
  349. FORM104  BSR       FORMSIZE
  350.          BSR       EA10                <EA>,D@
  351.  SPC 1
  352.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  353.  SPC 1
  354.          MOVE.B    (A4),D4
  355.          LSR.B     #1,D4
  356.          BSR       FORMREGD
  357.          BRA.S     CS12                COMMON
  358.  SPC 1
  359. FORM105  BSR       FORMSIZE            D@,<EA>
  360.          MOVE.B    (A4),D4
  361.          LSR.B     #1,D4
  362.          BSR       FORMREGD
  363.  SPC 1
  364.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  365.  
  366.          MOVE.W    (A4),D4
  367.          MOVE.W    #$1FD,D7            ALTERABLE MEMORY ADDRESSING
  368.          BSR       EA10
  369. CS12     BRA       COMMON
  370.  PAGE
  371.          LONG
  372. *                            PEA     (JMP  JSR)
  373. FORM11   MOVE.W    #$7E4,D7            CONTROL ADDERSSING
  374.          BSR       EA10
  375.          BRA       CS12      COMMON
  376.  
  377.          LONG
  378. *                            JMP  JSR
  379. FORM11SL MOVE.L    D4,D0               LOOK FOR .S  OR  .L           1,4
  380.          AND.W     #$3F,D0             .                             1,4
  381.          CMP.W     #$38,D0             .                             1,4
  382.          BNE.S     FORM112             NOT .S                        1,4
  383.          MOVE.B    #'.',(A5)+          PERIOD                        1,4
  384.          MOVE.B    #'S',(A5)+          S                             1,4
  385. FORM112  CMP.W     #$39,D0             .                             1,4
  386.          BNE.S     FORM114             .                             1,4
  387.          MOVE.B    #'.',(A5)+          PERIOD                        1,4
  388.          MOVE.B    #'L',(A5)+          L                             1,4
  389. FORM114  BRA       FORM11              .                             1,4
  390.  PAGE
  391. * BIT 5432109876543210
  392. *     ....XXX.....0...       DATA DESTINATION REGISTER
  393. *     ....XXX.....1...       ADDRESS REGISTER
  394. *     ....XXX.00......       BYTE
  395. *     ........01......       WORD
  396. *     ........10......       LONG
  397. *     ............0...       DATA REGISTER TO DATA REGISTER
  398. *     ............1...       MEMORY TO MEMORY
  399. *     ............0XXX       DATA SOURCE REGISTER
  400. *     ............1XXX       ADDRESS SOURCE REGISTER
  401. *
  402.          LONG
  403. FORM12   DS        0                   ABCD  ADDX  SBCD  SUBX
  404.          BSR       FORMSIZE
  405.  SPC 1
  406.          BTST      #3,D4
  407.          BNE.S     FORM125
  408.  SPC 1
  409.          BSR       FORMREGD            D@,D@;   FORMAT SOURCE
  410.  SPC 1
  411.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  412.  SPC 1
  413.          MOVE.B    (A4),D4
  414.          LSR.B     #1,D4
  415.          BSR       FORMREGD            FORMAT DESTINATION
  416.          BRA.S     CS11                COMMON
  417.  SPC 1
  418. FORM125  MOVE.B    #'-',(A6)+          -
  419.          MOVE.B    #'(',(A6)+          (
  420.          BSR       FORMREGA            A@    SOURCE
  421.  SPC 1
  422.          MOVE.L    #'(-,)',D0           ),-(
  423.          BSR.S     SCHR                STORE CHARS
  424.  SPC 1
  425.          MOVE.B    (A4),D4
  426.          LSR.B     #1,D4
  427.          BSR       FORMREGA            A@   DESTINATION
  428.          MOVE.B    #')',(A6)+
  429.          BRA.S     CS11                COMMON
  430.  PAGE
  431. * BIT 5432109876543210
  432. *     ....XXX.....1...       ADDRESS REGISTER    DESTINATION
  433. *     ....XXX.00......       BYTE
  434. *     ........01......       WORD
  435. *     ........10......       LONG
  436. *     ............1...       MEMORY TO MEMORY
  437. *     ............1XXX       ADDRESS SOURCE REGISTER
  438. *
  439.          LONG
  440. FORM12A  DS        0                   CMPM
  441.          BSR       FORMSIZE
  442.  SPC 1
  443.          MOVE.B    #'(',(A6)+          (
  444.          BSR       FORMREGA            A@
  445.  SPC 1
  446.          MOVE.L    #'(,+)',D0           )+,(
  447.          BSR.S     SCHR                STORE CHARS
  448.  SPC 1
  449.          MOVE.B    (A4),D4
  450.          LSR.B     #1,D4
  451.          BSR       FORMREGA            A@
  452.          MOVE.B    #')',(A6)+
  453.          MOVE.B    #'+',(A6)+
  454. CS11     BRA       COMMON
  455.  PAGE
  456.          LONG
  457. IQUICK   BRA       IQUICKA             ADDQ  SUBQ
  458.  SPC 4
  459. * BIT 5432109876543210
  460. *     0111...0........       FIXED
  461. *     ....RRR.........       DATA REGISTER
  462. *     ........DDDDDDDD       SIGN EXTENDED DATA
  463. *
  464.          LONG
  465. IMOVEQ   DS        0
  466.          MOVE.B    #'#',(A6)+          IMMEDIATE
  467.  SPC 1
  468.          MOVE.W    (A4),D0
  469.          EXT.W     D0
  470.          EXT.L     D0
  471.          BSR       HEX2DEC             DECIMAL
  472.  SPC 1
  473.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  474.  SPC 1
  475.          ROL.W     #7,D4
  476.          BSR       FORMREGD
  477.          BRA       CS11                COMMON
  478.  PAGE
  479. SCHR     MOVE.B    D0,(A6)+            OUTPUT STRING
  480.          LSR.L     #8,D0
  481.          BNE       SCHR                MORE TO OUTPUT
  482.          RTS
  483.  SPC 2
  484. * MOVE FROM SR  (STATUS REGISTER)
  485. *
  486.          LONG
  487. IMVFSR   MOVE.L    #',RS'>>8,D0           SR,
  488.  SPC 1
  489.          BSR       SCHR
  490.          BSR       EA                  DATA ALTERABLE
  491.          BRA       CS11               COMMON
  492.  SPC 1
  493. * MOVE FROM USP (USER STACK POINTER)
  494. *
  495.          LONG
  496. IMVFUSP  MOVE.L    #',PSU',D0          USP,
  497.          BSR       SCHR
  498.          BSR       FORMREGA
  499.          BRA       CS11                  COMMON
  500.  SPC 1
  501. * MOVE TO SR (STATUS REGISTER)
  502. *
  503.          LONG
  504. IMVTSR   MOVE.W    #$FFD,D7            DATA ADDRESSING
  505.          BSR       EA
  506.          MOVE.L    #'RS,'>>8,D0           ,SR
  507. IMVT44   BSR       SCHR
  508.          BRA       CS11                    COMMON
  509.  SPC 1
  510. * MOVE TO USP (USER STACK POINTER)
  511. *
  512.          LONG
  513. IMVTUSP  BSR       FORMREGA
  514.          MOVE.L    #'PSU,',D0          ,USP
  515.          BRA       IMVT44
  516.  SPC 1
  517. *  MOVE TO CCR (CONDITION CODE REGISTER)
  518. *
  519.          LONG
  520. IMVTCCR  MOVE.W    #$FFD,D7            DATA ADDRESSING
  521.          BSR       EA
  522.          MOVE.L    #'RCC,',D0          ,CCR
  523.          BRA       IMVT44
  524.  PAGE
  525. * BIT  5432109876543210
  526. *      0000...1..001...      FIXED
  527. *      ....XXX.........      DATA REGISTER
  528. *      ........0.......      MEMORY TO REGISTER
  529. *      ........1.......      REGISTER TO MEMORY
  530. *      .........0......      WORD
  531. *      .........1......      LONG
  532. *      .............XXX      ADDRESS REGISTER
  533. *
  534.          LONG
  535. IMOVEP   DS        0
  536.          MOVE.B    #'.',(A5)+          D@,#(A@)
  537.          MOVE.W    #'LW',D0
  538.          BTST      #6,D4
  539.          BEQ.S     IMOVEP11            USE "W"
  540.          LSR.W     #8,D0               USE "L"
  541. IMOVEP11 MOVE.B    D0,(A5)+            LENGTH
  542.  SPC 1
  543.          MOVE.B    (A4),D4
  544.          LSR.B     #1,D4
  545.  SPC 1
  546.          BTST.B    #7,1(A4)
  547.          BEQ.S     IMOVEP35
  548.  SPC 1
  549.          BSR       FORMREGD            D@,$HHHH(A@)
  550.  SPC 1
  551.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  552.  SPC 1
  553.          MOVE.W    (A4),D4
  554.          BSR.S     IMOVEP66
  555. CS20     BRA       COMMON4
  556.  SPC 1
  557. IMOVEP35 BSR.S     IMOVEP66            $HHHH(A@),D@
  558.  SPC 1
  559.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  560.  SPC 1
  561.          MOVE.B    (A4),D4
  562.          LSR.B     #1,D4
  563.          BSR       FORMREGD
  564.          BRA       CS20                COMMON4
  565.  SPC 1
  566. IMOVEP66 MOVE.B    #'$',(A6)+          FORMAT DISPLACEMENT
  567.          MOVE.W    2(A4),D0
  568.          BSR       PNT4HX
  569.  SPC 1
  570.          MOVE.B    #'(',(A6)+
  571.  
  572.          MOVE.W    (A4),D4
  573.          BSR       FORMREGA
  574.          MOVE.B    #')',(A6)+
  575.          RTS
  576.  PAGE
  577.          LONG
  578. SCOMMON  BRA       COMMON              NOP RESET RTE RTR RTS TRAPV
  579.  SPC 1
  580.          LONG
  581. SCC      BSR       ICCCC               GET REST OF OP-CODE
  582.          BSR       EA                  DATA ALTERABLE
  583.          BRA       SCOMMON
  584.  
  585.  
  586.          LONG
  587. IDBCC    DS        0                   DB--
  588.          MOVE.W    (A4),D4
  589.          BSR       FORMREGD
  590.  
  591.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  592.          MOVE.B    #'$',(A6)+          HEX FIELD TO FOLLOW
  593.  
  594.          BSR       ICCCC
  595.          BRA.S     ICC55
  596.  SPC 1
  597. *  BIT  5432109876543210
  598. *       0110............     FIXED
  599. *       ....CCCC........     CONDITION
  600. *       ........DDDDDDD0     DISPLACEMENT
  601. *       ...............1     ERROR (ODD BOUNDRY DISPLACEMENT)
  602. *
  603.          LONG
  604. ICC      DS        0                   B--
  605.          BSR       ICCCC
  606.  SPC 1
  607. IBSR     MOVE.B    #'$',(A6)+          BSR   BRA
  608.  SPC 1
  609.          TST.B     D4
  610.          BEQ.S     ICC55               16 BIT DISPLACEMENT
  611.  SPC 1
  612.          MOVE.B    #'.',(A5)+
  613.          MOVE.B    #'S',(A5)+
  614.          EXT.W     D4                  8 BIT DISPLACEMENT
  615.  SPC 1
  616. ICC35    EXT.L     D4                  SIGN-EXTENDED DISPLACEMENT
  617.          ADD.L     HISPC(A1),D4       + PROGRAM COUNTER
  618.          ADD.L     #2,D4               + TWO
  619.          MOVE.L    D4,D0
  620.  
  621.          ASR.L     #1,D4
  622.          BCS       FERROR              ODD BOUNDRY DISPLACEMENT
  623.  
  624.          BSR       PNT6HX
  625.          BRA       SCOMMON
  626.  SPC 1
  627. ICC55    ADD.L     #2,D3               SIZE
  628.          MOVE.W    2(A4),D4
  629.          MOVE.B    #'.',(A5)+
  630.          MOVE.B    #'L',(A5)+          .L FOR 16 BIT DISPLACEMENT
  631.          BRA       ICC35
  632.  PAGE
  633.          LONG
  634. *                          BCHG  BCLR  BSET  BTST
  635. ISETD    DS        0                   DYNAMIC BIT
  636.          ROL.W     #7,D4
  637.          BSR       FORMREGD            DATA REGISTER
  638.  SPC 1
  639. ISETD12  MOVE.B    D5,(A6)+          COMMA SEPARATOR
  640.  SPC 1
  641.          MOVE.W    (A4),D4
  642.          BSR       EA                  DATA ALTERABLE
  643. CS18     BRA       SCOMMON
  644.  SPC 3
  645.          LONG
  646. *                            BCHG  BCLR  BSET  BTST
  647. *  1ST WORD     .... .... ..XX XXXX    EA   DATA ALTERABLE ONLY
  648. *  2ND WORD     0000 0000 000Y YYYY    BIT NUMBER
  649. *
  650. ISETS    DS        0                   STATIC BIT
  651.          ADD.L     #2,D3     SIZE
  652.          MOVE.B    #'#',(A6)+          IMMEDIATE
  653.  
  654.          CLR.L     D0
  655.          MOVE.W    2(A4),D0            GET BIT POSITION FROM 2ND WORD
  656.          MOVE.L    D0,D1
  657.          LSR.L     #5,D1
  658.          BNE       FERROR
  659.          BSR       HEX2DEC             DECIMAL
  660.  SPC 1
  661.          BRA       ISETD12
  662.  PAGE
  663. *   BIT  5432109876543210
  664. *        ....XXX.........    IMMEDIATE COUNT/REGISTER
  665. *        .......0........    RIGHT SHIFT
  666. *        .......1........    LEFT SHIFT
  667. *        ........00......    BYTE
  668. *        ........01......    WORD
  669. *        ........10......    LONG
  670. *        ....0...11......    WORD (MEMORY)
  671. *        ....0...11AAAAAA    EFFECTIVE ADDRESS
  672. *        ..........0.....    SHIFT IMMEDIATE COUNT
  673. *        ..........1.....    SHIFT COUNT (MODULO 64) IN DATA REGISTER
  674. *
  675.          LONG
  676. ISHIFT   DS        0                   AS-  LS-  RO-  ROX-
  677.          MOVE.W    #'LR',D0
  678.          BTST      #8,D4               DIRECTION BIT
  679.          BEQ.S     ISHIFT13            RIGHT
  680.          LSR.W     #8,D0               LEFT
  681. ISHIFT13 MOVE.B    D0,(A5)+            DIRECTION; "L" OR "R"
  682.  SPC 1
  683.          MOVE.W    (A4),D0
  684.          AND.W     #$00C0,D0
  685.          CMP.W     #$00C0,D0
  686.          BEQ.S     ISHIFTM1            MEMORY SHIFT
  687.  SPC 1
  688.          BSR       FORMSIZE
  689.  SPC 1
  690.          ROL.W     #7,D4
  691.          BTST      #12,D4              I/R BIT
  692.          BNE.S     ISHIFT33            COUNT IN REGISTER
  693.  SPC 1
  694.          AND.B     #$07,D4             IMMEDIATE COUNT
  695.          BNE.S     ISHIFT23
  696.          OR.B      #$08,D4             CHANGE ZERO TO EIGHT
  697. ISHIFT23 OR.B      #'0',D4
  698.          MOVE.B    #'#',(A6)+
  699.          MOVE.B    D4,(A6)+
  700.          BRA.S     ISHIFT44
  701.  SPC 1
  702. ISHIFT33 BSR       FORMREGD
  703.  SPC 1
  704. ISHIFT44 MOVE.B    D5,(A6)+           COMMA SEPARATOR
  705.  SPC 1
  706.          MOVE.W    (A4),D4
  707.          BSR       FORMREGD
  708. CS17     BRA       CS18                COMMON
  709.  SPC 1
  710. ISHIFTM1 MOVE.B    #'.',(A5)+          PERIOD
  711.          MOVE.B    #'W',(A5)+          .WORD
  712.  
  713.          BTST      #11,D4
  714.          BNE       FERROR              BIT 11 MUST BE ZERO
  715.  SPC 1
  716.          MOVE.W    #$1FC,D7            MEMORY ALTERABLE ADDRESSING
  717.          BSR       EA
  718.          BRA       CS17                COMMON
  719.  PAGE
  720. ICCCC    MOVE.L    #$0F,D0             APPEND CONDITION CODE         1,4
  721.          AND.B     (A4),D0             D0 = CCC                      1,4
  722.          LSL.L     #1,D0               D0 = CCC*2
  723.  SPC 1
  724.          MOVE.W    BRTBL(PC,D0.W),D1   GET BRANCH MNEMONIC
  725.          MOVE.B    D1,(A5)+            (REVERSED) FROM THE TABLE
  726.          LSR.W     #8,D1               AND ADD THE NONBLANK PORTION
  727.          CMP.B     #' ',D1             TO THE BUFFER.
  728.          BEQ.S     ICCCC9
  729.          MOVE.B    D1,(A5)+
  730. ICCCC9   RTS
  731.  SPC 2
  732. BRTBL    DC.B      ' T'      'T '  BRA ACCEPTED
  733.          DC.B      ' F'      'F '
  734.          DC.B      'IH'      'HI'
  735.          DC.B      'SL'      'LS'
  736.          DC.B      'CC'      'CC'
  737.          DC.B      'SC'      'CS'
  738.          DC.B      'EN'      'NE'
  739.          DC.B      'QE'      'EQ'
  740.          DC.B      'CV'      'VC'
  741.          DC.B      'SV'      'VS'
  742.          DC.B      'LP'      'PL'
  743.          DC.B      'IM'      'MI'
  744.          DC.B      'EG'      'GE'
  745.          DC.B      'TL'      'LT'
  746.          DC.B      'TG'      'GT'
  747.          DC.B      'EL'      'LE'
  748.  PAGE
  749. *   BIT  5432109876543210
  750. *        ....RRRMMM......    DESTINATION REGISTER MODE
  751. *        ..........MMMRRR    SOURCE MODE REGISTER
  752. *
  753. * IF BYTE SIZE; ADDRESS DIRECT NOT ALLOWED AS SOURCE
  754. *
  755. IMOVEA1  DS        0
  756.          MOVE.W    #$FFF,D7            ALL MODES
  757.          BSR       EA
  758.  SPC 1
  759.          MOVE.B    D5,(A6)+            COMMA SEPARATOR
  760.  SPC 1
  761.          MOVE.W    (A4),D4             ....RRRMMM......
  762.          LSR.W     #1,D4               .....RRRMMM.....
  763.          LSR.B     #5,D4               .....RRR.....MMM
  764.          ROR.W     #8,D4               .....MMM.....RRR
  765.          LSL.B     #5,D4               .....MMMRRR.....
  766.          LSR.W     #5,D4               ..........MMMRRR
  767.  SPC 1
  768. * IF .BYTE DESTINATION A@ NOT ALLOWED
  769.          MOVE.W    #$1FF,D7            DATA ALTERABLE + A@
  770.          MOVE.B    (A4),D0
  771.          CMP.B     #$01,D0
  772.          BNE.S     IMOVE19             NOT BYTE SIZE
  773.  
  774.          MOVE.W    #$1FD,D7            DATA ALTERABLE
  775. IMOVE19
  776.  
  777.          BSR       EA
  778.          BRA.S     CS19      COMMON
  779.  PAGE
  780. *  IF BYTE; ADDRESS REGISTER DIRECT NOT ALLOWED
  781. IQUICKA  DS        0                   ADDQ  SUBQ
  782.          BSR.S     FORMSIZE
  783.  SPC 1
  784.          MOVE.B    #'#',(A6)+
  785.          ROL.W     #7,D4
  786.          AND.B     #7,D4
  787.          BNE.S     IQUICK21
  788.          OR.B      #8,D4               MAKE ZERO INTO EIGHT
  789. IQUICK21 OR.B      #'0',D4             MAKE ASCII
  790.          MOVE.B    D4,(A6)+
  791.  SPC 1
  792.          MOVE.B    D5,(A6)+          COMMA SEPARATOR
  793.  SPC 1
  794.          MOVE.W    (A4),D4
  795.  
  796.          MOVE.W    (A4),D0
  797.          AND.W     #$00C0,D0
  798.          BEQ.S     IQUICK31            DATA ALTERABLE
  799.          MOVE.W    #$1FF,D7            ALTERABLE ADDRESSING
  800. IQUICK31 BSR       EA
  801. CS19     BRA       COMMON
  802.  PAGE
  803. *  BIT   5432109876543210
  804. *        ........00......    BYTE
  805. *        ........01......    WORD
  806. *        ........10......    LONG
  807. *        ........11......    ERROR
  808. *
  809. FORMSIZE DS        0
  810.          MOVE.W    (A4),D2
  811.          MOVE.B    #'.',(A5)+          STORE PERIOD
  812.          LSR.W     #6,D2
  813.          AND.W     #$03,D2
  814.          BNE.S     FORM91
  815.          MOVE.B    #'B',(A5)+          STORE "B"
  816.          BRA.S     FORM95
  817.  SPC 1
  818. FORM91   MOVE.B    #'W',D0
  819.          CMP.B     #1,D2
  820.          BEQ.S     FORM93
  821.          MOVE.B    #'L',D0
  822.          CMP.B     #2,D2
  823.          BNE.S     FE10                FERROR
  824. FORM93   MOVE.B    D0,(A5)+  STORE "W" OR "L"
  825. FORM95   RTS
  826.  PAGE
  827. EA000    BSR       FORMREGD
  828.          BTST      #0,D7
  829.          BEQ.S     FE10                FERROR
  830.          RTS
  831.  SPC 2
  832. EA001    BSR       FORMREGA
  833.          BTST      #1,D7
  834.          BEQ.S     FE10              FERROR       THIS MODE NOT ALLOWED
  835.          RTS
  836.  SPC 2
  837. EA010    MOVE.B    #'(',(A6)+
  838.          BSR       FORMREGA
  839.          MOVE.B    #')',(A6)+
  840.          BTST      #2,D7
  841.          BEQ.S     FE10              FERROR       THIS MODE NOT ALLOWED
  842.          RTS
  843.  SPC 2
  844. EA011    MOVE.B    #'(',(A6)+
  845.          BSR       FORMREGA
  846.          MOVE.B    #')',(A6)+
  847.          MOVE.B    #'+',(A6)+
  848.          BTST      #3,D7
  849.          BEQ.S     FE10      FERROR     THIS MODE NOT ALLOWED
  850. EA011RTS RTS
  851.  SPC 2
  852. EA100    MOVE.B    #'-',(A6)+
  853.          MOVE.B    #'(',(A6)+
  854.          BSR       FORMREGA
  855.          MOVE.B    #')',(A6)+
  856.          BTST      #4,D7
  857.          BNE       EA011RTS
  858. FE10     BRA       FERROR              THIS MODE NOT ALLOWED
  859.  PAGE
  860. *  ENTER       A4 = POINTER TO FIRST WORD
  861. *              D3 = OFFSET TO EXTENSION
  862. *              D4 = VALUE TO PROCESS
  863. *              D7 = MODES ALLOWED MASK
  864. *
  865. EA       DS        0
  866.          MOVE.L    D4,D0
  867.          LSR.W     #3,D0
  868.          AND.W     #$7,D0
  869.          BEQ       EA000
  870.  SPC 1
  871.          CMP.B     #1,D0
  872.          BEQ       EA001
  873.  SPC 1
  874.          CMP.B     #2,D0
  875.          BEQ       EA010
  876.  SPC 1
  877.          CMP.B     #3,D0
  878.          BEQ       EA011
  879.  SPC 1
  880.          CMP.B     #4,D0
  881.          BEQ       EA100
  882.  SPC 1
  883.          CMP.B     #5,D0
  884.          BEQ.S     EA101
  885.  SPC 1
  886.          CMP.B     #7,D0
  887.          BEQ.S     EA111
  888.  PAGE
  889. *    EXTENSION WORD
  890. *   BIT  5432109876543210
  891. *        0...............    DATA REGISTER
  892. *        1...............    ADDRESS REGISTER
  893. *        .RRR............    REGISTER
  894. *        ....0...........    SIGN EXTENDED, LOW ORDER INTEGER IN INDEX REG
  895. *        ....1...........    LONG VALUE IN INDEX REGISTER
  896. *        .....000........
  897. *        ........DDDDDDDD    DISPLACEMENT INTEGER
  898. *
  899. * EA110            ADDRESS REGISTER INDIRECT WITH INDEX
  900.  SPC 1
  901.          BTST      #6,D7
  902.          BEQ       FE10              FERROR     THIS MODE NOT ALLOWED
  903.  
  904.          MOVE.W    (A4,D3),D1
  905.          AND.W     #$0700,D1
  906.          BNE       FE10               FERROR    BITS 10-8 MUST BE ZERO
  907.  
  908.          MOVE.W    (A4,D3),D0          D0 = DISPLACEMENT
  909.          EXT.W     D0
  910.          EXT.L     D0
  911.          BSR       HEX2DEC             DECIMAL
  912.          MOVE.B    #'(',(A6)+          (
  913.  SPC 1
  914.          BSR       FORMREGA            XX(A@
  915.  SPC 1
  916.          MOVE.B    #',',(A6)+          XX(A@,
  917.  SPC 1
  918.          MOVE.B    (A4,D3),D4
  919.          ASR.B     #4,D4
  920.          BPL.S     EA1105
  921.          BSR       FORMREGA
  922.          BRA.S     EA1107
  923.  SPC 1
  924. EA1105   BSR       FORMREGD
  925. EA1107   MOVE.B    #'.',(A6)+          XX(A@,X@.
  926.  SPC 1
  927.          MOVE.W    (A4,D3),D4          D4 = R@
  928.          MOVE.B    #'W',D0             ..........W
  929.          BTST      #11,D4
  930.          BEQ.S     EA1109
  931.          MOVE.B    #'L',D0             ..........L
  932. EA1109   MOVE.B    D0,(A6)+
  933.          MOVE.B    #')',(A6)+          ...........)
  934.          ADD.L     #2,D3
  935.          RTS
  936.  PAGE
  937. * ADDRESS REGISTER INDIRECT WITH DISPLACEMENT
  938. *
  939. EA101    BTST      #5,D7               101000;   DIS(A@)
  940.          BEQ.S     FE11                FERROR;  THIS MODE NOT ALLOWED
  941.  
  942.          MOVE.W    (A4,D3),D0
  943.          EXT.L     D0
  944.          BSR       HEX2DEC             DECIMAL
  945.          ADD.L     #2,D3               SIZE
  946.          BRA       EA010
  947.  PAGE
  948. *  111000          ABSOLUTE SHORT
  949. *  111001          ABSOLUTE LONG
  950. *  111010          PROGRAM COUNTER WITH DISPLACEMENT
  951. *  111011          PROGRAM COUNTER WITH INDEX
  952. *  111100          IMMEDIATE OR STATUS REG
  953. *
  954. EA111
  955.          AND.W     #7,D4
  956.          BNE.S     EA1112
  957.  SPC 1
  958.          BTST      #7,D7
  959.          BEQ.S     FE11                FERROR;  THIS MODE NOT ALLOWED
  960.  
  961.          MOVE.W    (A4,D3),D0          111000;   ABSOLUTE SHORT
  962.          EXT.L     D0
  963.          MOVE.B    #'$',(A6)+
  964.          BSR       PNT8HX              SIGN EXTENDED VALUE           1,3
  965.          ADD.L     #2,D3               SIZE + 2
  966.          RTS
  967.  SPC 1
  968. EA1112   CMP.B     #1,D4
  969.          BNE.S     EA1113
  970.  SPC 1
  971.          BTST      #8,D7
  972.          BEQ.S     FE11                FERROR;  THIS MODE NOT ALLOWED
  973.  
  974.          MOVE.B    #'$',(A6)+          HEX
  975.          MOVE.L    (A4,D3),D0          111001;     ABSOLUTE LONG
  976.          BSR       PNT8HX
  977. *- MOVE.B    #'.',(A6)+          FORCE LONG FORMAT                   1,3
  978. *- MOVE.B    #'L',(A6)+          IE   .L                             1,3
  979.          ADD.L     #4,D3
  980.          RTS
  981.  SPC 1
  982. EA1113   CMP.B     #2,D4
  983.          BNE.S     EA1114
  984.  SPC 1
  985.          BTST      #9,D7
  986.          BNE.S     EA1113A
  987. FE11     BRA       FERROR              THIS MODE NOT ALLOWED
  988. EA1113A
  989.  
  990.          MOVE.W    (A4,D3),D0  111010;   PC + DISPLACEMENT  DESTINATION(PC)
  991.          EXT.L     D0
  992.          ADD.L     HISPC(A1),D0
  993.          ADD.L     #2,D0
  994.          MOVE.B    #'$',(A6)+          HEX "$"                       1,3
  995.          BSR       PNT8HX              DESTINATION
  996.          MOVE.L    #')CP(',D0          (PC)
  997.          BSR       SCHR                STORE WORD
  998.          ADD.L     #2,D3               SIZE
  999.          RTS
  1000.  SPC 1
  1001. EA1114   CMP.B     #3,D4
  1002.          BNE.S     EA1115
  1003.  PAGE
  1004. * PROGRAM COUNTER WITH INDEX    DESTINATION(PC,R@.X)
  1005. *
  1006. *  5432109876543210     SECOND WORD
  1007. *  0...............          DATA REGISTER
  1008. *  1...............          ADDRESS REGISTER
  1009. *  .XXX............          REGISTER
  1010. *  ....0...........          SIGN-EXTENDED, LOW ORDER WORD INTEGER
  1011. *                            ..IN INDEX REGISTER
  1012. *  ....1...........          LONG VALUE IN INDEX REGISTER
  1013. *  .....000........
  1014. *  ........XXXXXXXX          DISPLACEMENT INTEGER
  1015. *
  1016.          BTST      #10,D7
  1017.          BEQ       FE11             FERROR    THIS MODE NOT ASLLOWED
  1018.  
  1019.          MOVE.W    (A4,D3),D1
  1020.          AND.W     #$0700,D1
  1021.          BNE       FE11                FERROR;  BITS 10-8 MUST BE ZERO
  1022.  
  1023.          MOVE.B    1(A4,D3),D0         111100;   DESTINATION(PC,R@.X)
  1024.          EXT.W     D0
  1025.          EXT.L     D0
  1026.          ADD.L     HISPC(A1),D0
  1027.          ADD.L     #2,D0
  1028.          MOVE.B    #'$',(A6)+          HEX "$"                       1,3
  1029.          BSR       PNT8HX              DESTINATION                   1,3
  1030.  SPC 1
  1031.          MOVE.L    #',CP(',D0
  1032.          BSR       SCHR                DES(PC,
  1033.  SPC 1
  1034.          MOVE.W    (A4,D3),D4
  1035.          ROL.W     #4,D4
  1036.          BTST      #3,D4
  1037.          BEQ.S     EAF25
  1038.          BSR       FORMREGA
  1039.          BRA.S     EAF27
  1040. EAF25    BSR       FORMREGD            DES(PC,R@
  1041. EAF27
  1042.  SPC 1
  1043.          MOVE.B    #'.',(A6)+          DES(PC,R@.
  1044.  SPC 1
  1045.          MOVE.W    (A4,D3),D4
  1046.          MOVE.W    #'LW',D0
  1047.          BTST      #11,D4
  1048.          BEQ.S     EAF35
  1049.          LSR.W     #8,D0
  1050. EAF35    MOVE.B    D0,(A6)+            DES(PC,R@.X
  1051.  SPC 1
  1052.          MOVE.B    #')',(A6)+          DES(PC,R@.X)
  1053.          ADD.L     #2,D3
  1054.          RTS
  1055.  PAGE
  1056. *   BIT  5432109876543210
  1057. *        ..........111100    FIRST WORD;  #<IMMEDIATE>
  1058. *
  1059. EA1115   CMP.B     #4,D4
  1060.          BNE       FE11                FERROR
  1061.  SPC 1
  1062.          BTST      #11,D7
  1063.          BEQ       FE11                FERROR;  THIS MODE NOT ALLOWED
  1064.  
  1065.          MOVE.B    #'#',(A6)+          IMMEDIATE
  1066.  SPC 1
  1067.          MOVE.B    -1(A5),D1
  1068.          CMP.B     #'L',D1
  1069.          BEQ.S     EA11155             LONG
  1070.  SPC 1
  1071.          MOVE.W    (A4,D3),D0
  1072.  
  1073.          CMP.B     #'B',D1
  1074.          BNE.S     EA11153              .WORD
  1075.  
  1076. * BYTE SIZE; DATA ALLOWED
  1077. *  0000 0000 XXXX XXXX
  1078. *  1111 1111 1XXX XXXX
  1079.          MOVE.L    D0,D1
  1080.          LSR.W     #8,D1
  1081.          BEQ.S     EA11153
  1082.          MOVE.L    D0,D1
  1083.          ASR.W     #7,D1
  1084.          ADD.W     #1,D1
  1085.          BNE       FE11                FERROR
  1086.  
  1087. EA11153  EXT.L     D0
  1088.          BSR       HEX2DEC
  1089.          ADD.L     #2,D3
  1090.          RTS
  1091.  SPC 1
  1092. EA11155  MOVE.L    (A4,D3),D0
  1093.          BSR       HEX2DEC
  1094.          ADD.L     #4,D3               SIZE
  1095.          RTS
  1096.  PAGE
  1097. MOVEMS   MOVE.B    #'.',(A5)+          PERIOD
  1098.          MOVE.W    #'LW',D0
  1099.          BTST      #6,D4
  1100.          BEQ.S     MOVEMS2
  1101.          LSR.W     #8,D0
  1102. MOVEMS2  MOVE.B    D0,(A5)+            SIZE
  1103.          RTS
  1104.  SPC 1
  1105. * MOVEM - REGISTER EXPANSION
  1106. *
  1107. MOVEMR   DS        0
  1108.          MOVE.W    2(A4),D2            D2 = SECOND WORD
  1109.          MOVE.L    #' '>>8,D0             D0 = SPACE
  1110.          MOVE.L    #'/'>>8,D7             D7 = /
  1111.          SUB.L     #1,A6               ADJUST STORE POINTER
  1112.          MOVE.L    #'0'>>8,D5          D5 = REGISTER #
  1113.          MOVE.W    #'AD',D4            D4 = REG CLASS
  1114.  SPC 1
  1115. MOVEMR11 BTST      D1,D2
  1116.          BEQ.S     MOVEMR77            BIT RESET
  1117.  SPC 1
  1118.          CMP.B     (A6),D0           BIT SET
  1119.          BNE.S     MOVEMR44            NOT SPACE
  1120.  SPC 1
  1121. MOVEMR33 MOVE.B    D4,1(A6)            REG TYPE
  1122.          MOVE.B    D5,2(A6)            REG #
  1123.          MOVE.B    #'-',3(A6)          -
  1124.          ADD.L     #3,A6
  1125.          BRA.S     MOVEMR88
  1126.  SPC 1
  1127. MOVEMR44 CMP.B     #',',(A6)
  1128.          BEQ       MOVEMR33            COMMA SEPARATOR
  1129.  SPC 1
  1130.          CMP.B     (A6),D7           / SEPARATOR
  1131.          BEQ       MOVEMR33
  1132.  SPC 1
  1133.          MOVE.B    D4,1(A6)            REG TYPE
  1134.          MOVE.B    D5,2(A6)            REG #
  1135.          MOVE.B    #'-',3(A6)         - SEPARATOR
  1136.          BRA.S     MOVEMR88
  1137.  SPC 1
  1138. MOVEMR77 CMP.B     #',',(A6)
  1139.          BEQ.S     MOVEMR88            COMMA
  1140.  SPC 1
  1141.          CMP.B     (A6),D0
  1142.          BEQ.S     MOVEMR88            SPACE
  1143.          CMP.B     1(A6),D0
  1144.          BEQ.S     MOVEMR79            SPACE
  1145.          ADD.L     #3,A6
  1146. MOVEMR79 MOVE.B    D7,(A6)            / SEPARATOR
  1147.  SPC 1
  1148. MOVEMR88 ADD.L     #1,D5
  1149.          ADD.L     D6,D1               D1 = BIT POSITION
  1150.          CMP.B     #'8',D5
  1151.          BNE       MOVEMR11
  1152.  SPC 1
  1153.          CMP.B     (A6),D0             SPACE
  1154.          BEQ.S     MOVEMR94
  1155.  SPC 1
  1156.          CMP.B     1(A6),D0            SPACE
  1157.          BEQ.S     MOVEMR94
  1158.          ADD.L     #3,A6
  1159.          MOVE.B    D7,(A6)             /   SEPARATOR
  1160.  SPC 1
  1161. MOVEMR94 MOVE.B    #'0',D5             RESET REG TO ZERO
  1162.          LSR.W     #8,D4               CHANGE REG TYPE
  1163.          BNE       MOVEMR11            MORE
  1164.  SPC 1
  1165.          MOVE.B    D0,(A6)             SPACE
  1166.          RTS
  1167.  PAGE
  1168. DCODE68K DS        0
  1169.          LINK      A1,#-LOCVARSZ       CREATE A FRAME FOR THE
  1170.          MOVEM.L   D0-D2/A4,DATA(A1)   CODE AND ITS PC.  A4
  1171.          LEA       DATA(A1),A4         POINTS TO THE CODE.
  1172.  
  1173.          MOVE.L    A5,A3               A3 = START OF OUTPUT BUFFER
  1174.          MOVE.L    #BUFSIZE,D0
  1175.          MOVE.L    A3,A6
  1176. DEC311   MOVE.B    #' ',(A6)+          SPACE FILL BUFFER
  1177.          SUB.L     #1,D0
  1178.          BNE       DEC311
  1179.  SPC 1
  1180.          MOVE.L    A3,A6               FORMAT ADDRESS
  1181.          MOVE.L    HISPC(A1),D0
  1182.          BSR       FRELADDR
  1183.  SPC 1
  1184. * CHECK FOR KNOWN ILLEGAL CODES
  1185.          MOVE.W    (A4),D0
  1186.  
  1187.          LEA       KI(PC),A5
  1188.          MOVE.L    A5,A6
  1189.          ADD.L     #KIEND-KI,A6
  1190. DEC404   CMP.W     (A5)+,D0
  1191.          BEQ.S     FE12                FERROR;  ILLEGAL CODE         1,4
  1192.          CMP.L     A6,A5
  1193.          BNE       DEC404
  1194.  SPC 1
  1195. * LOOK FOR MATCH OF OP-CODE
  1196. *
  1197.          LEA       TBL(PC),A5          A5 = POINTER TO DECODE TABLE
  1198.          LEA       TBLE(PC),A6         A6 = POINTER TO END OF TABLE
  1199. DEC411   MOVE.W    (A4),D0             FIRST WORD
  1200.          AND.W     (A5)+,D0            MASK
  1201.          CMP.W     (A5)+,D0
  1202.          BEQ.S     DEC425              FOUND MATCH
  1203.          ADD.L     #2,A5               UPDATE POINTER
  1204.          CMP.L     A6,A5
  1205.          BNE       DEC411              MORE TABLE
  1206. FE12     BRA.S     FERROR              ILLEGAL INSTRUCTION           1,4
  1207.  SPC 1
  1208. DEC425   CLR.L     D6
  1209.          MOVE.B    (A5)+,D6            D6 = (GOTO OFFSET)/4
  1210.          LSL.L     #2,D6
  1211.  SPC 1
  1212.          CLR.L     D7
  1213.          MOVE.B    (A5)+,D7            D7 = INDEX TO OP-CODE
  1214.  SPC 1
  1215. * MOVE OP-CODE TO BUFFER
  1216. *
  1217.          LEA       OPCTBL(PC),A0
  1218. DEC510   TST       D7
  1219.          BEQ.S     DEC530              AT INDEX
  1220. DEC515   TST.B     (A0)+
  1221.          BPL       DEC515              MOVE THROUGH FIELD
  1222.          SUB.L     #1,D7
  1223.          BRA       DEC510
  1224.  SPC 1
  1225. DEC530   MOVE.L    #FOC,D0             .                             1,4
  1226.          LEA.L     (A3,D0),A5          A5 = STORE POINTER  OP-CODE   1,4
  1227. DEC535   MOVE.B    (A0)+,D0
  1228.          BCLR      #7,D0
  1229.          BNE.S     DEC537              END OF MOVE
  1230.          MOVE.B    D0,(A5)+
  1231.          BRA       DEC535
  1232. DEC537   MOVE.B    D0,(A5)+
  1233.  SPC 1
  1234. * CALCULATE GOTO AND GO
  1235. *
  1236.          MOVE.L    #2,D3     D3= SIZE
  1237.          LEA       X(PC),A0
  1238.          ADD.L     D6,A0
  1239.  SPC 1
  1240.          MOVE.L    #FOP,D0             .                             1,4
  1241.          LEA.L     (A3,D0),A6          A6 = POINTER FOR OPERAND      1,4
  1242.  SPC 1
  1243.          MOVE.W    (A4),D4   D4 = FIRST WORD
  1244.  
  1245.          MOVE.B    #',',D5   D5 = CONTAINS ASCII COMMA
  1246.  SPC 1
  1247.          MOVE.W    #$1FD,D7  D7 = DATA ALTERABLE MODES ALLOWED
  1248.  
  1249.          JMP       (A0)
  1250. *
  1251. *  A4 = POINTER TO DATA IN FRAME CREATED BY 'LINK A1,...'
  1252. *  A5 = POINTER STORE OP-CODE
  1253. *  A6 = POINTER STORE OPERAND
  1254. *  D3 = SIZE = 2 BYTES
  1255. *  D4 = FIRST WORD
  1256. *  D7 = ADDRESS MODES ALLOWED ($1FD) DATA ALTERABLE
  1257.  PAGE
  1258. COMMON4  ADD.L     #2,D3     SIZE = 4
  1259.  SPC 1
  1260. COMMON   MOVE.L    D3,D6               D6 = SIZE
  1261.          MOVE.B    #' ',(A6)+          SPACE AS LAST CHAR
  1262.  SPC 1
  1263.          MOVE.L    A6,A5               SAVE END OF BUFFER POINTER
  1264.          MOVE.L    #FDATA,D0           .                             1,4
  1265.          LEA.L     (A3,D0),A6          .                             1,4
  1266.  
  1267. COMMON35 MOVE.W    (A4)+,D0            GET NEXT WORD OF DATA.
  1268.          ADD.L     #2,HISPC(A1)       ADJUST PROG COUNTER.
  1269.          BSR       PNT4HX              FORMAT DATA. (A6)+
  1270.          SUB.B     #2,D3
  1271.          BNE       COMMON35
  1272.  
  1273.          MOVE.L    A5,A6               A6 = RESTORE END POINTER
  1274.  SPC 1
  1275.          MOVE.L    A3,A5               A5 =  BEGINNING OF BUFFER
  1276.  SPC 1
  1277.          MOVE.L    HISPC(A1),A4       MOVE THE UPDATED PC
  1278.          UNLK      A1                  TO A4 AND UNDO FRAME.
  1279.  
  1280.          RTS
  1281.  SPC 3
  1282. FERROR   DS        0
  1283. * ILLEGAL INSTRUCTION
  1284. *
  1285.          MOVE.L    #FOC,D0             .                             1,4
  1286.          LEA.L     (A3,D0),A6          .                             1,4
  1287.          LEA       MSG111(PC),A5
  1288. FERROR35 MOVE.B    (A5)+,D0
  1289.          CMP.B     #EOT,D0
  1290.          BEQ.S     FERROR39
  1291.          MOVE.B    D0,(A6)+
  1292.          BRA       FERROR35
  1293. FERROR39 DS        0
  1294.  SPC 1
  1295.          MOVE.W    (A4),D0
  1296.          BSR       PNT4HX
  1297.  SPC 1
  1298.          MOVE.L    #2,D3     SIZE
  1299.  SPC 1
  1300.          BRA COMMON
  1301.  SPC 1
  1302. MSG111   DC.B      'DC.W    $',EOT
  1303.  PAGE
  1304.  SPC 1
  1305. KI       DC.W      $4AFB               KNOWN ILLEGAL CODES
  1306. KIEND    DS        0
  1307.  PAGE
  1308. *  \1   MASK
  1309. *  \2   OP-CODE PATTERN
  1310. *  \3   GOTO OFFSET
  1311. *  \4   INDEX TO OP-CODE
  1312. C68      MACRO
  1313.          DC.W      $\1
  1314.          DC.W      $\2
  1315.          DC.B      (\3-X)>>2
  1316.          DC.B      \4
  1317.          ENDM
  1318.  SPC 1
  1319. TBL      DS        0
  1320.          C68       FEC0,E6C0,ISHIFT,56           RO
  1321.          C68       FEC0,E4C0,ISHIFT,57           ROX
  1322.          C68       FEC0,E2C0,ISHIFT,55           LS
  1323.          C68       FEC0,E0C0,ISHIFT,54           AS
  1324.          C68       F018,E018,ISHIFT,56           RO
  1325.          C68       F018,E010,ISHIFT,57           ROX
  1326.          C68       F018,E008,ISHIFT,55           LS
  1327.          C68       F018,E000,ISHIFT,54           AS
  1328.          C68       F0C0,D0C0,FORM10EX,4          ADD       <EA>,A@
  1329.          C68       F130,D100,FORM12,53           ADDX
  1330.          C68       F000,D000,FORM10EX,4            ADD
  1331.          C68       F1F8,C188,FORM9,50            EXG
  1332.          C68       F1F8,C148,FORM8,50            EXG
  1333.          C68       F1F8,C140,FORM7,50            EXG
  1334.          C68       F1F0,C100,FORM12,49           ABCD
  1335.          C68       F1C0,C1C0,FORM6D,48           MULS
  1336.          C68       F1C0,C0C0,FORM6D,47           MULU
  1337.          C68       F000,C000,FORM10,2            AND
  1338.          C68       F0C0,B0C0,FORM10EX,6          CMP     <EA>,A@
  1339.          C68       F138,B108,FORM12A,46           CMPM
  1340.          C68       F100,B100,FORM10,5            EOR
  1341.          C68       F000,B000,FORM10EX,6            CMP
  1342.          C68       F0C0,90C0,FORM10EX,44         SUB       <EA>,A@
  1343.          C68       F130,9100,FORM12,45           SUBX
  1344.          C68       F000,9000,FORM10EX,44           SUB
  1345.          C68       F1F0,8100,FORM12,43           SBCD
  1346.          C68       F1C0,81C0,FORM6D,42           DIVS
  1347.          C68       F1C0,80C0,FORM6D,41           DIVU
  1348.          C68       F000,8000,FORM10,40           OR
  1349.          C68       F100,7000,IMOVEQ,39           MOVEQ
  1350.          C68       FF00,6100,IBSR,51             BSR
  1351.          C68       FF00,6000,IBSR,65             BRA                 1,3
  1352.          C68       F000,6000,ICC,38              B
  1353.          C68       F0F8,50C8,IDBCC,37              DB
  1354.          C68       F0C0,50C0,SCC,36              S
  1355.          C68       F100,5100,IQUICK,35           SUBQ
  1356.          C68       F100,5000,IQUICK,34           ADDQ
  1357.          C68       F1C0,41C0,FORM6A,33           LEA
  1358.          C68       F1C0,4180,FORM6D,32           CHK
  1359.          C68       FFC0,4EC0,FORM11SL,31         JMP                 1,4
  1360.          C68       FFC0,4E80,FORM11SL,30         JSR                 1,4
  1361.          C68       FFFF,4E77,SCOMMON,29           RTR
  1362.          C68       FFFF,4E76,SCOMMON,28           TRAPV
  1363.          C68       FFFF,4E75,SCOMMON,27           RTS
  1364.          C68       FFFF,4E73,SCOMMON,26           RTE
  1365.          C68       FFFF,4E72,ISTOP,25             STOP
  1366.          C68       FFFF,4E71,SCOMMON,24           NOP
  1367.          C68       FFFF,4E70,SCOMMON,23           RESET
  1368.          C68       FFF8,4E68,IMVFUSP,60          MOVE FROM USP
  1369.          C68       FFF8,4E60,IMVTUSP,60          MOVE TO USP
  1370.          C68       FFF8,4E58,FORM5,22            UNLINK
  1371.          C68       FFF8,4E50,ILINK,21            LINK
  1372.          C68       FFF0,4E40,FORM4,20            TRAP
  1373.          C68       FF80,4C80,IMOVEMTR,15         MOVEM FROM REGISTERS
  1374.          C68       FFC0,4AC0,FORM1A,19           TAS
  1375.          C68       FF00,4A00,FORM1,18            TST
  1376.          C68       FFF8,48C0,FORM3,17            EXT.L
  1377.          C68       FFF8,4880,FORM3,16            EXT.W
  1378.          C68       FF80,4880,IMOVEMFR,15         MOVEA TO REGISTERS
  1379.          C68       FFF8,4840,FORM3,14            SWAP
  1380.          C68       FFC0,4840,FORM11,13           PEA
  1381.          C68       FFC0,4800,FORM1A,12           NBCD
  1382.          C68       FFC0,46C0,IMVTSR,59           MOVE TO SR
  1383.          C68       FF00,4600,FORM1,11            NOT
  1384.          C68       FFC0,44C0,IMVTCCR,59          MOVE TO CCR
  1385.          C68       FF00,4400,FORM1,10            NEG
  1386.          C68       FF00,4200,FORM1,9             CLR
  1387.          C68       FFC0,40C0,IMVFSR,59           MOVE.W  FROM  SR
  1388.          C68       FF00,4000,FORM1,8             NEGX
  1389.          C68       F000,3000,IMOVE,59            MOVE.W
  1390.          C68       F000,2000,IMOVE,60            MOVE.L
  1391.          C68       F000,1000,IMOVE,58            MOVE.B
  1392.          C68       FF00,0C00,IMMED,6             CMP       #
  1393.          C68       FF00,0A00,IMMED,5             EOR       #
  1394.          C68       FF00,0600,IMMED,4             ADD       #
  1395.          C68       FF00,0400,IMMED,3             SUB       #
  1396.          C68       FF00,0200,IMMED,2             AND       #
  1397.          C68       FF00,0000,IMMED,1             OR        #
  1398.          C68       F138,0108,IMOVEP,0            MOVEP
  1399.          C68       FFC0,08C0,ISETS,64            BSET
  1400.          C68       FFC0,0880,ISETS,63            BCLR
  1401.          C68       FFC0,0840,ISETS,62            BCHG
  1402.          C68       FFC0,0800,ISETS,61            BTST
  1403.          C68       F1C0,01C0,ISETD,64            BSET
  1404.          C68       F1C0,0180,ISETD,63            BCLR
  1405.          C68       F1C0,0140,ISETD,62            BCHG
  1406.          C68       F1C0,0100,ISETD,61            BTST
  1407. TBLE     DS        0
  1408.  PAGE
  1409. N68      MACRO
  1410.          DC.B      '\1',128+'\2'        \1\2
  1411.          ENDM
  1412. OPCTBL   DS        0
  1413.          N68       MOVE,P    0
  1414.          N68       O,R       1
  1415.          N68       AN,D      2
  1416.          N68       SU,B      3
  1417.          N68       AD,D      4
  1418.          N68       EO,R      5
  1419.          N68       CM,P      6
  1420.          N68       MOV,E     7
  1421.          N68       NEG,X     8
  1422.          N68       CL,R      9
  1423.          N68       NE,G      10
  1424.          N68       NO,T      11
  1425.          N68       NBC,D   12
  1426.          N68       PEA.,L    13
  1427.          N68       SWAP.,W   14
  1428.          N68       MOVE,M    15
  1429.          N68       EXT.,W    16
  1430.          N68       EXT.,L    17
  1431.          N68       TS,T      18
  1432.          N68       TAS.,B    19
  1433.          N68       TRA,P     20
  1434.          N68       LIN,K     21
  1435.          N68       UNL,K     22
  1436.          N68       RESE,T    23
  1437.          N68       NO,P      24
  1438.          N68       STO,P     25
  1439.          N68       RT,E      26
  1440.          N68       RT,S      27
  1441.          N68       TRAP,V    28
  1442.          N68       RT,R      29
  1443.          N68       JS,R      30
  1444.          N68       JM,P      31
  1445.          N68       CHK.,W    32
  1446.          N68       LEA.,L    33
  1447.          N68       ADD,Q     34
  1448.          N68       SUB,Q     35
  1449.          DC.B      128+'S'   36
  1450.          N68       D,B       37
  1451.          DC.B      128+'B'   38
  1452.          N68       MOVEQ.,L  .....39
  1453.          N68       O,R       40
  1454.          N68       DIVU.,W   41
  1455.          N68       DIVS.,W   42
  1456.          N68       SBC,D   43
  1457.          N68       SU,B      44
  1458.          N68       SUB,X     45
  1459.          N68       CMP,M     46
  1460.          N68       MULU.,W   47
  1461.          N68       MULS.,W   48
  1462.          N68       ABC,D   49
  1463.          N68       EX,G      50
  1464.          N68       BS,R      .....51
  1465.          N68       NUL,L     .....52
  1466.          N68       ADD,X     53
  1467.          N68       A,S       54
  1468.          N68       L,S       55
  1469.          N68       R,O       56
  1470.          N68       RO,X      57
  1471.          N68       MOVE.,B   58
  1472.          N68       MOVE.,W   59
  1473.          N68       MOVE.,L   60
  1474.          N68       BTS,T     61
  1475.          N68       BCH,G     62
  1476.          N68       BCL,R     63
  1477.          N68       BSE,T     64
  1478.          N68       BR,A      65                                      1,3
  1479.          END